// axios的二次封装
// 在你工作的时候是否对axios进行二次封装？二次封装的目的是什么？
/*
目的：1.利用axios进行请求与响应拦截
      2.请求拦截器，一般可以在请求头中携带公共的参数:token
      3.响应拦截器，可以简化服务器返回的数据，处理http网络错误
*/
import axios from 'axios';
import useUserStore from '@/store/modules/user';
// @ts-ignore
import { ElMessage } from "element-plus";
const requset = axios.create({
    // 基础路径
    baseURL: '/api',
    // 超时时间
    timeout: 5000
});

requset.interceptors.request.use((config) => {
    // 获取用户仓库
    let userStore = useUserStore()
    // config:请求拦截器回调注入的对象(配置对象),配置对象的身上最重要的一件事headers属性
    // 可以通过请求头携带公共参数token
    if (userStore.userInfo.token) {
        config.headers.token = userStore.userInfo.token
    }
    return config;
});

requset.interceptors.response.use((response) => {
    return response.data
}, error => {
    let msg = "";
    const status = error.response?.status;
    switch (status) {
        case 401:
            msg = "token过期";
            break;
        case 403:
            msg = "无权访问";
            break;
        case 404:
            msg = "请求地址错误";
            break;
        case 500:
            msg = "服务器出现问题";
            break;
        default:
            msg = "无网络,请稍后再试";
    }
    // 提示错误信息
    ElMessage({
        type: "error",
        message: msg,
    });
    return Promise.reject(new Error(error))
});

export default requset;